// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()
const _ = db.command

// 设置TabBar图标配置
exports.main = async (event, context) => {
  try {
    console.log('setTabBarIcon云函数被调用，参数:', event)
    
    const { iconType, imageUrl, selectedImageUrl, action = 'set' } = event
    
    console.log('参数解构结果:', {
      iconType: iconType,
      imageUrl: imageUrl,
      selectedImageUrl: selectedImageUrl,
      action: action
    })
    
    // 参数验证
    if (!iconType) {
      return {
        success: false,
        error: '缺少必要参数：iconType',
        message: '图标类型不能为空'
      }
    }
    
    // 验证iconType是否合法
    const validIconTypes = ['home', 'dishes', 'cart', 'orders', 'profile']
    if (!validIconTypes.includes(iconType)) {
      return {
        success: false,
        error: '无效的图标类型',
        message: `图标类型必须是以下之一：${validIconTypes.join(', ')}`
      }
    }
    
    if (action === 'set' && !imageUrl) {
      return {
        success: false,
        error: '缺少必要参数：imageUrl',
        message: '普通状态图标URL不能为空'
      }
    }
    
    // 验证图标URL格式
    if (action === 'set' && imageUrl) {
      if (!imageUrl.startsWith('cloud://') && !imageUrl.startsWith('/') && !imageUrl.startsWith('http')) {
        return {
          success: false,
          error: '无效的图标URL格式',
          message: '图标URL必须是有效的路径或云存储URL'
        }
      }
    }
    
    console.log('参数验证通过，开始处理...')
    
    if (action === 'clear') {
      // 清除图标：将该类型的所有图标设为非活跃
      const clearResult = await db.collection('tabbar_icons')
        .where({ iconType: iconType })
        .update({
          data: {
            isActive: false,
            updateTime: db.serverDate()
          }
        })
      
      console.log('清除图标结果:', clearResult)
      
      return {
        success: true,
        data: { action: 'clear', iconType },
        message: `已清除${iconType}图标，恢复为默认`
      }
    }
    
    // 设置图标流程
    
    // 1. 先将该类型的所有图标设为非活跃
    const deactivateResult = await db.collection('tabbar_icons')
      .where({ iconType: iconType })
      .update({
        data: {
          isActive: false,
          updateTime: db.serverDate()
        }
      })
    
    console.log('停用现有图标结果:', deactivateResult)
    
    // 2. 查找是否已存在相同配置的记录
    const existingResult = await db.collection('tabbar_icons')
      .where({
        iconType: iconType,
        imageUrl: imageUrl
      })
      .get()
    
    console.log('查找现有配置结果:', existingResult)
    
    let result
    const iconData = {
      iconType: iconType,
      imageUrl: imageUrl,
      selectedImageUrl: selectedImageUrl || imageUrl,
      isActive: true,
      updateTime: db.serverDate()
    }
    
    if (existingResult.data && existingResult.data.length > 0) {
      // 更新现有记录
      const existingId = existingResult.data[0]._id
      result = await db.collection('tabbar_icons')
        .doc(existingId)
        .update({
          data: iconData
        })
      
      console.log('更新现有记录结果:', result)
      
      return {
        success: true,
        data: { action: 'update', iconType, id: existingId },
        message: `${iconType}图标配置更新成功`
      }
    } else {
      // 创建新记录
      iconData.createTime = db.serverDate()
      result = await db.collection('tabbar_icons').add({
        data: iconData
      })
      
      console.log('创建新记录结果:', result)
      
      return {
        success: true,
        data: { action: 'create', iconType, id: result._id },
        message: `${iconType}图标配置创建成功`
      }
    }
    
  } catch (error) {
    console.error('setTabBarIcon云函数执行失败:', error)
    return {
      success: false,
      error: error.toString(),
      message: 'TabBar图标设置失败'
    }
  }
}